package com.compmov.webservice;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

import com.compmov.datamodel.Comentario;
import com.compmov.datamodel.TipoLugar;
import com.google.gson.Gson;

public class TipoLugarWSClient {

	private WebServiceClient webServiceClient;
	public static final String TAG = "WEBSERVICE";
	
	public TipoLugarWSClient(String WSName){
		super();
		this.webServiceClient = new WebServiceClient("/rest/"+WSName);
	}
	
	public TipoLugarWSClient(WebServiceClient webServiceClient) {
		super();
		this.webServiceClient = webServiceClient;
	}
	
	public List<TipoLugar> getAll() throws WSClientException{
		
		Gson gson = new Gson();
		JSONObject jsonObj;
		JSONObject tipoLugar;
		TipoLugar tipoLugar2;
		List<TipoLugar> tipoLugares = new LinkedList<TipoLugar>();
		
		// Pass the parameters if needed , if not then pass dummy one as follows
		Map<String, String> params = new HashMap<String, String>();
		
		
		Log.d(TAG,"Iniciando WEBSERVICE...");		
		// Obtener la respuesta del metodo llamado.
		String response = webServiceClient.webGet("/getAll", params);
		Log.d(TAG,"Response= "+response);
		try {			
			WSError error = gson.fromJson(response, WSError.class);			
			if (error.getError_description() == null){				
				try {
					// Crea un objeto JSON del response.
					jsonObj = new JSONObject(response);
					Log.d(TAG,"Response jsonObj:"+jsonObj);
					// Crea un arreglo de objetos del response.
					JSONArray jsonTipoLugares = jsonObj.optJSONArray("tipoLugar");
					if (jsonTipoLugares != null){
						// Si hay más de un objeto en response.
						for(int i=0; i<jsonTipoLugares.length();i++){
							tipoLugar = jsonTipoLugares.getJSONObject(i);
							tipoLugar2 = gson.fromJson(tipoLugar.toString(), 
									TipoLugar.class);
							tipoLugares.add(tipoLugar2);
						}
					}else{
						// Si solo hay un objeto en response
						// Se obtiene el objeto
						tipoLugar = jsonObj.getJSONObject("tipoLugar");
						tipoLugar2 = gson.fromJson(tipoLugar.toString(), 
								TipoLugar.class);	
						if(tipoLugar2.getId()!=0){
							tipoLugares.add(tipoLugar2);
						}
					}
					Log.d(TAG, tipoLugares + "");					
				} catch (JSONException e) {
					// TODO: handle exception
					Log.e(TAG, e.getMessage(), e);
					throw new WSClientException(e);
				}
				
			}else{
				Log.e(TAG, error + "");
				throw new WSClientException(error);
			}				
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(TAG, e.getMessage(), e);
			throw new WSClientException(e);
		}
		return tipoLugares;				
	}		
	
    
}
